//封装user.js界面   :   用来管理所有与用户相关的状态
// 导入api接口
import { getUserInfo, userLogin } from '@/api/user.js'
// 导入utils文件的auth.js文件
import { getToken, setToken, removeToken } from '@/utils/auth.js'


const state = {
  // 读取token储存到state中
  token: getToken(),
  // 创建用户资料共享
  userInfos:{}
}
const mutations = {
  // 保存token 
  // 分别保存到vuex 和 cookies里面c
  setToken(state, payload) {
    // 储存到vuex中
    state.token = payload
    // 储存到cookies中
    setToken(payload)
  },
  //删除state中的token
  removeToken(state) {
    // 清除vuex中的token
    state.token = null
    // 清除cookies中的token
    removeToken()
  },
  // 用户信息状态处理位置
  // 保存用户信息
  seaveUserInfo(state,payload){
    state.userInfos = payload
  },
  // 删除用户信息
  setUserInfo(state) {
    state.userInfos = {}
  }
}
const actions = {
  // 完成登陆
  async login(context, payload) {
    // 加入try  catch  对服务器返还的错误进行修改
    try {
      const res = await userLogin(payload)
      // 对服务器返回的数据进行判断储存数据
      if (res.success) {
        const token = res.data
        context.commit('setToken', token)
      }
      // 在catch中传入错误的参数
    } catch (err) {
      console.log(err.message);
      // 将错误抛出给 登陆界面
      return Promise.reject(err)
    }
  },
  // 处理用户信息位置
  // 获取用户信息
  async getUserInfos(context){
    let res = await getUserInfo()
    console.log(res);
    context.commit('seaveUserInfo',res.data)
    return res
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}